import { auth } from '@/libs'
export default {
    use(axios) {
        // 添加请求拦截器
        axios.interceptors.request.use(
            (config) => {
                // 附加令牌信息
                try {
                    const accessToken = auth.getAccessToken()
                    // 当 accessToken 有效且不存在 Authorization 自动添加。
                    if (accessToken && !config.headers.Authorization) {
                        config.headers.Authorization = 'Bearer ' + accessToken
                    }
                } catch (e) {
                    console.error(e)
                }
                return config
            },
            (error) => {
                return Promise.reject(error)
            }
        )

        // 添加响应拦截器
        axios.interceptors.response.use(
            (response) => {
                return response.data
            },
            (error) => {
                console.debug('[axios.interceptors.response] error', error)
                // 1.请求已完成 得到服务器响应 但是http状态码不是2xx范围内
                if (error.response) {
                    const { data, status, statusText } = error.response
                    let result = {}
                    if (data) {
                        result = data
                    } else {
                        result = {
                            message: statusText,
                            code: status,
                        }
                    }
                    switch (error.response.status) {
                        case 401:
                            // 清空认证相关信息
                            auth.clear()
                            return Promise.reject(result)
                        default:
                            return Promise.reject(result)
                    }
                } else if (error.request) {
                    // 2.发起请求时出错未收到任何响应
                    const data = {
                        code: error.code,
                        message: error.message,
                        error: error,
                    }
                    if (error.code === 'ECONNABORTED') {
                        data.message = '服务不可用,网络超时'
                    }

                    return Promise.reject(data)
                } else {
                    // 3.一些错误是在设置请求时触发的
                    // Something happened in setting up the request that triggered an Error
                    // console.log("Error", error.message, error.code);
                    const data = {
                        code: error.code,
                        message: error.message,
                        error: error,
                    }
                    return Promise.reject(data)
                }
            }
        )
    },
}
